package com.onlygx.dva.utils;

import cn.hutool.core.util.ObjectUtil;
import com.onlygx.dva.config.annotation.security.AuthNorm;

import java.util.HashSet;
import java.util.List;

/**
 * <p>
 * 权限工具类。
 * </p>
 *
 * @author 高祥
 * @since 2023-08-08
 */
public class AuthUtils {

    /**
     * 判定一个sourceList是否包含另一个judgeList中的值。
     * 如果 authNorm 为  or，则代表 sourceList 中包含 judgeList 中的任意值就返回true。
     * 如果 authNorm 为 and，则代表 sourceList 中包含 judgeList 中的所有值才返回true。
     * 2023年8月8日15:40:15 高祥
     * @param judgeList 要判断的值列表
     * @param authNorm 判断类型 or或者and
     * @param sourceList 判断数据源。
     * @return 判断结果
     */
    public static boolean judgeAuth(List<String> judgeList, AuthNorm authNorm, List<String> sourceList) {
        if(ObjectUtil.isNull(sourceList)) return false;
        if(AuthNorm.OR.equals(authNorm)){
            for (String judge : judgeList) {
                boolean have = sourceList.contains(judge);
                if(have) return true;
            }
        } else if (AuthNorm.AND.equals(authNorm)) {
            return new HashSet<>(sourceList).containsAll(judgeList);
        }
        return false;
    }
}
